SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO


CREATE PROCEDURE [dbo].[LIQPresentismo] 
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL(18,4) OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT,
@DiasDelPeriodo INT,
@Desde DATETIME,
@Hasta DATETIME
AS 

SET NOCOUNT ON
SET DATEFORMAT DMY 


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 18/11/2005 - Se agregaron parametros @Desde y @Hasta para manejo de Fechas en Titulares y Suplentes
-- 23/11/2005 - Se agregan los parametros Meses Vencidos para Titulares e Interinos y se Modifican las
--		las fechas @Desde y @Hasta usadas para evaluar los datos.
-- 09/07/2006 - Los parametros se obtienen de la funcion fnObtenerValorDeParametro con la fecha que corresponda.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE @DiasDeLicenciaAcumulados INT
DECLARE @DiasDeLicencias INT
SELECT @DiasDeLicenciaAcumulados = 0
SELECT @DiasDeLicencias = 0
DECLARE @Licencia INT
DECLARE @SalarioRemunerativo DECIMAL(18,4)
DECLARE @BonificacionPorPresentismo DECIMAL(18,4)
DECLARE @Afiliacion INT, @horas INT, @regimensalarial  INT, @organizacion INT, @situacionrevista INT
DECLARE @TipoDeFuncion INT
DECLARE @NroError INT
DECLARE @SubOrganizacion INT
DECLARE @ComisionServicio INT
DECLARE @PorcentajePresentismoTotal DECIMAL(18,4)
DECLARE @PorcentajePresentismoMedio DECIMAL(18,4)
DECLARE @CabeceraDeLiquidacion INT 
DECLARE @MesesVencidosTitulares INT
DECLARE @MesesVencidosSuplentes INT

SELECT @NroError = 0

SELECT @Afiliacion = idAfiliacion FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @horas= horas, @regimensalarial = regimensalarial, @SubOrganizacion = SubOrganizacion FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

-- Sacar Porcentajes para Calculo de Presentismo
--SELECT @PorcentajePresentismoTotal = CONVERT(DECIMAL(18,4), Valor1) FROM tb_Parametros WHERE Parametro = '%PresentismoTotal'
--SELECT @PorcentajePresentismoMedio = CONVERT(DECIMAL(18,4), Valor1) FROM tb_Parametros WHERE Parametro = '%PresentismoMedio'

SELECT @PorcentajePresentismoTotal = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%PresentismoTotal', @Hasta))
SELECT @PorcentajePresentismoMedio = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('%PresentismoMedio', @Hasta))

--SELECT @MesesVencidosTitulares = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'MesesVencidosPresentismoTitulares'
--SELECT @MesesVencidosSuplentes = CONVERT(INT, Valor1) FROM tb_Parametros WHERE Parametro = 'MesesVencidosPresentismoSuplentes'

SELECT @MesesVencidosTitulares = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('MesesVencidosPresentismoTitulares', @Hasta))
SELECT @MesesVencidosSuplentes = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('MesesVencidosPresentismoSuplentes', @Hasta))
/*
IF @SituacionRevista IN (1,2,3)
	SELECT @Desde = DATEADD(MONTH, @MesesVencidosTitulares, @Desde), 
		@Hasta =  DATEADD(MONTH, @MesesVencidosTitulares, @Hasta)
ELSE
	SELECT @Desde = DATEADD(MONTH, @MesesVencidosSuplentes, @Desde), 
		@Hasta =  DATEADD(MONTH, @MesesVencidosSuplentes, @Hasta)	
*/
IF @SituacionRevista IN (1,2,3)
	BEGIN
		SELECT @Desde = DATEADD(MONTH, @MesesVencidosTitulares, @Desde), 
			@Hasta =  DATEADD(MONTH, @MesesVencidosTitulares, @Hasta)
	SELECT @SalarioRemunerativo =  ISNULL(SUM(R.MontoHaberes),0) FROM Tb_registrodeliquidaciones R
								INNER JOIN tb_Liquidaciones L ON L.idLiquidacion = R.Liquidacion
								INNER JOIN tb_CabeceraDeLiquidacion C ON C.IdCabeceraDeLiquidacion= L.IDCabeceraLiquidacion
								WHERE (MONTH(C.Desde) = MONTH( @desde) AND YEAR(C.Desde) = YEAR( @desde)) 
									AND R.Servicio = @servicio
									AND R.Concepto = 4
									AND C.TipoDeLiquidacion = 4
	END		
ELSE
	BEGIN
	SELECT @Desde = DATEADD(MONTH, @MesesVencidosSuplentes, @Desde), 
		@Hasta =  DATEADD(MONTH, @MesesVencidosSuplentes, @Hasta)	

	SELECT @SalarioRemunerativo  = SUM(MontoHaberes) FROM tb_RegistroDeLiquidaciones WHERE Concepto = 4 and Servicio = @Servicio And Liquidacion = @idLiquidacion
		
	END

-- Buscar el idliquidacion del mes anterior (segun SR) HACER
--SELECT @SalarioRemunerativo  = SUM(MontoHaberes) FROM tb_RegistroDeLiquidaciones WHERE Concepto = 4 and Servicio = @Servicio And Liquidacion = @idLiquidacion

SELECT @TipoDeFuncion = f.TipoDeFuncion, @Organizacion = Organizacion, @horas=p.horas FROM tb_Funciones f, tb_Plazas p WHERE f.idfuncion = p.funcion and idPlaza = @Plaza

SELECT @BonificacionPorPresentismo = 0
SELECT @DiasDeLicencias =  0
SELECT @DiasDeLicenciaAcumulados = 0
SELECT @ComisionServicio = 0

--If Exists(SELECT * FROM tb_SubServiciosAgentes SS, tb_ServiciosAgentes S WHERE idServicioAgente = ServicioAgente and Agente = @Agente And
--	ServicioAgente = @Servicio And SS.Licencia In (101,100) And SS.FechaAlta <= @Desde And SS.FechaBaja is Null)  

-- Vemos si tiene una comision de servicio. Si tiene corresponde presentismo. AGREGADO 27-04-2005 y Modificado 18/11/2005 quedo igual que en LIQBonificacionXConduccion
If Exists(SELECT * FROM Tb_SubServiciosAgentes SS, tb_ServiciosAgentes S
		 WHERE idServicioAgente = ServicioAgente and Agente = @Agente 
		        AND ServicioAgente = @Servicio And SS.Licencia In (101,100)
		        AND SS.FechaAlta <= @Hasta 
		        AND ( (SS.FechaBaja IS NULL) OR (SS.FechaBaja IS NOT NULL AND SS.FechaBaja > @Desde) ))  
				SELECT @Comisionservicio = 1

IF EXISTS (SELECT * FROM Tb_SubServiciosAgentes WHERE Fechaalta < @Hasta AND ( ( FechaBaja > @Desde AND Fechabaja < @Hasta AND Fechabaja is not null ) or (FechaBaja is null) )
	AND licencia IS NOT NULL AND (licencia <>  35 AND licencia <> 67 AND licencia <> 26 AND licencia <> 66 AND licencia <> 23 ) and ServicioAgente = @Servicio)
BEGIN
	DECLARE licenciasliq cursor for 
	SELECT licencia FROM tb_SubServiciosAgentes 
	INNER JOIN tb_Licencias On idLicencia = licencia 	
	WHERE ServicioAgente = @Servicio AND licencia IS NOT NULL AND fechaalta <@hasta AND (( fechabaja > @desde AND fechabaja < @hasta) OR (fechabaja IS NULL)) AND licencia NOT IN (100,101,102,105,106,108,109,110) AND PierdePresentismo = 'S'
	
	OPEN licenciasliq
	
	FETCH NEXT FROM licenciasliq INTO @Licencia
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
		EXEC @DiasDeLicencias = spDiasDeLicencias @Agente, @desde, @hasta, @licencia, 'H', 1, null
		SELECT @DiasDeLicenciaAcumulados = @DiasDeLicenciaAcumulados + @DiasDeLicencias 
		FETCH NEXT FROM licenciasliq INTO @Licencia
	END
	
	CLOSE licenciasliq
	DEALLOCATE LicenciasLiq
END


IF @DiasDeLicenciaAcumulados > 1
	 SELECT @BonificacionPorPresentismo = 0 

IF @DiasDeLicenciaAcumulados = 1
	-- SELECT @BonificacionPorPresentismo = (@SalarioRemunerativo * 15) / 100
	-- Cambio del 27/09/2005
	SELECT @BonificacionPorPresentismo = (@SalarioRemunerativo * @PorcentajePresentismoMedio) / 100

IF @DiasDeLicenciaAcumulados = 0
	--SELECT @BonificacionPorPresentismo = (@SalarioRemunerativo * 30) / 100
	-- Cambio del 27/09/2005
	SELECT @BonificacionPorPresentismo = (@SalarioRemunerativo * @PorcentajePresentismoTotal) / 100

IF (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion

IF @TipoDeFuncion IN (12,13,15) and @comisionservicio = 0
  BEGIN
	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 9, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @BonificacionPorPresentismo, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
	If @@Error <> 0
		SELECT @NroError = @@Error
  END
ELSE
  BEGIN
	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 9, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, 0, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
	If @@Error <> 0
		SELECT @NroError = @@Error
  END

IF @NroError <> 0
  BEGIN
	SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion

	 INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) VALUES
	(@Agente, 9, convert(varchar,@NroError), getdate(), @idLiquidacion, @Organizacion, @Servicio, @CabeceraDeLiquidacion, @NroError)
  END
GO
